package com.nhjf.common.util.tools;


import java.io.UnsupportedEncodingException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import com.nhjf.common.DataConvertor;

public class StringUtil {
	
	
    /****
	 * 检测字符串不为空，并且不等于''
	 * 返回true表示不为空，返回false表示为空
	 * @return
	 */
	public  static boolean isNotNull(String str)
	{
	    if(str!=null && !str.trim().equals(""))
	    {
	    	return true;
	    }
	    return false;
	}
	
	
	 /****
	 * 检测集合 List 是否为空，size 是否大于 0
	 * 返回值：true 表示不为空且size 大于 0
	 * @return
	 */
	public  static boolean isNotNull(List list)
	{
	    if(list != null && list.size()>0)
	    {
	    	return true;
	    }
	    return false;
	}
	
	/**
	 * 判断2个字符串是否相等
	 * @param a
	 * @param b
	 * @return
	 */
	public static boolean equal(String a,String b){
		boolean result = false;
		if(null==a||""==a){
			if(null==b||""==b){
				result=true;
			}
		}else{
			if(null!=b&&a.trim().equals(b.trim())){
				result=true; 
			}
		}
		return result;
	}
	
	/**
	 * 转码
	 * @return
	 */
    public static final String changeCode(String str, int unicodeFlag) {
        try {
            switch (unicodeFlag) {
            case 0:
                return str;
            case 1:
                return new String(str.getBytes("ISO-8859-1"), "gb2312");
            case 2:
                return new String(str.getBytes("gb2312"), "ISO-8859-1");
            case 3:
                return new String(str.getBytes("UTF-8"), "gb2312");
            case 4:
                return new String(str.getBytes("gb2312"), "UTF-8");
            case 5:
                return new String(str.getBytes("GBK"), "ISO-8859-1");
            case 6:
                return new String(str.getBytes("ISO-8859-1"), "GBK");                    
            default:
                return str;
            }
        } catch (Exception ex) {
            return "";
        }
    }
    
	/**
	 * 转码2
	 * @return
	 */
    public static String getString(String s, String srcEncoding, String destEncoding) {
        try {
            return new String(s.getBytes(srcEncoding), destEncoding);
        } catch (UnsupportedEncodingException e) {
            return s;
        }
    }
    
	/**
	 * 前面补零
	 * @param a
	 * @param b
	 * @return
	 */
	public static String front(String str,int lenght){
		
		for(;str.length()<lenght;)
		{
			str="0"+str;
		}
		return str;
	}
	
	/**
	 * 后面补零
	 * @param a
	 * @param b
	 * @return
	 */
	public static String back(String str,int lenght){
		
		for(;str.length()<lenght;)
		{
			str=str+"0";
		}
		return str;
	}
	/**
	 * 获得当前yyyy-MM-dd(年月日)
	 * @return
	 * @throws ParseException 
	 */
	public static Date getFormatDate(Date dateTime) {
		  	SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
		    String dd = myFormatter.format(dateTime);
		    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
			Date date=null;
			try {
				date = format.parse(dd+ " 00:00:00");
			} catch (ParseException e) {
				LogMessage.logwrite(DataConvertor.class, e.getMessage());
			}		
			return date;	    
	}
	
	/**
	 * 获取该天得最后时刻
	 * 
	 * @param date
	 * @return
	 * @throws ParseException
	 */
	public static Date getendDate(Date date) throws ParseException {
		SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
		String dd = myFormatter.format(date);
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
		return format.parse(dd + " 23:59:59");
	}
	
	/**
	 * 
	 * @方法功能说明：用于判断两个数字之间的大小（1对应>,2对应>=,3对应<，4对应<=）,注意参数传递先后顺序
	 * @修改者名字：李玄玄
	 * @修改时间：2016年8月16日下午2:13:09
	 * @修改内容：
	 * @参数：@param ruleNum
	 * @参数：@param beginNum
	 * @参数：@param endNum
	 * @参数：@return
	 * @return:Boolean
	 * @throws
	 */
	public static Boolean checkNumerbSize(Integer ruleNum,Long beginNum,Long endNum){
		Boolean result = false;
		switch(ruleNum){
			case 1:
				if(beginNum.longValue() > endNum.longValue()){
					result = true;
				}
				break;
			case 2:
				if(beginNum.longValue() >= endNum.longValue()){
					result = true;
				}
			break;
			case 3:
				if(beginNum.longValue() < endNum.longValue()){
					result = true;
				}
				break;
			case 4:
				if(beginNum.longValue() <= endNum.longValue()){
					result = true;
				}
				break;
		}
		return result;
	}
	
	/**
	 * 
	 * @方法功能说明：根据两个日期计算天数
	 * @修改者名字：李玄玄
	 * @修改时间：2016年8月16日下午2:44:35
	 * @修改内容：
	 * @参数：@param beginDate
	 * @参数：@param endDate 
	 * @参数：@return
	 * @return:Integer
	 * @throws
	 */
	public static int getDateToDay(String smallDate,String bigDate){
		try {
			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			
			Date dateOne = format.parse(smallDate);
			Date dateTwo = format.parse(bigDate);
			
			
			Long dateTime = dateTwo.getTime() - dateOne.getTime();
			
			double dayNum = (double)dateTime / (3600 * 1000 * 24);
			
			int day = (int) Math.ceil(dayNum);
			return day;
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return -1;
		
	}
	
	/**
	 * 
	 * @方法功能说明：根据两个日期计算时间差
	 * @修改者名字：李玄玄
	 * @修改时间：2016年8月16日下午4:35:25
	 * @修改内容：
	 * @参数：@param beginDate
	 * @参数：@param endDate
	 * @参数：@return
	 * @return:int
	 * @throws
	 */
	public static int getDateToTime(String beginDate,String endDate){
		try {
			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			
			Date dateOne = format.parse(beginDate);
			Date dateTwo = format.parse(endDate);
			
			
			Long dateTime = dateTwo.getTime() - dateOne.getTime();
			
			int dayNum = (int) Math.ceil(dateTime / (3600 * 1000));
			return dayNum;
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return -1;
		
	}
	
	/**
	 * 
	 * @方法功能说明：获取当前系统时间之前某几天的时间
	 * @修改者名字：李玄玄
	 * @修改时间：2016年9月19日下午6:06:54
	 * @修改内容：
	 * @参数：@param dayNum
	 * @参数：@return
	 * @return:Date
	 * @throws
	 */
	public static Date getBeforeDate(Integer dayNum,Date nowDate,String dayType){
		Calendar calendar = Calendar.getInstance();
		if(dayType.equals("d")){
			calendar.setTime(StringUtil.getFormatDate(nowDate));
			calendar.add(Calendar.DAY_OF_MONTH, (-1 * dayNum));
		}
		if(dayType.equals("t")){
			calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - dayNum);
		}
		return calendar.getTime();
	}
	
	public static void main(String[] args) {
		System.out.println(StringUtil.getBeforeDate(2,new Date(),"t"));
	}
}
